package com.xm.queue.task2;

public interface IQueue {

    /**
     * 添加任务
     */
    void put(ITask task) throws InterruptedException;
    void putTryAcquire(ITask task) throws InterruptedException;

    /**
     * 拉取任务（阻塞） take() 适合消费者线程持续等待任务
     */
    ITask take() throws InterruptedException;
    ITask takeTryAcquire() throws InterruptedException;

    /**
     * 拉取任务（非阻塞） poll() 适合轮询或超时控制
     */
    ITask poll() throws InterruptedException;
    ITask pollTryAcquire() throws InterruptedException;

    /**
     * 队列大小
     */
    int size();
}
